package com.aliyun.messagemgt.application.service.Impl;

import com.aliyun.messagemgt.common.dto.send.MsgRecordVO;
import com.aliyun.messagemgt.application.service.MsgRecordService;
import com.aliyun.messagemgt.dto.vo.MsgRecordStatisticsVO;
import com.aliyun.messagemgt.domain.repository.MsgRecordRepository;
import com.aliyun.messagemgt.dto.in.ApiStatisticsQuery;
import com.aliyun.messagemgt.common.enums.ChannelTypeEnum;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * Created with IDEA
 *
 * @author:zhangxingxing 0027012120
 * @date:2019/1/23
 * @time:9:45
 */
@Service
class MsgRecordServiceImpl implements MsgRecordService {

    @Autowired
    private MsgRecordRepository msgRecordRepository;

    private static Logger logger = LoggerFactory.getLogger(MsgRecordServiceImpl.class);

    @Override
    public int batchMsgRecordInsert(List<MsgRecordVO> msgRecordVos) {
        return msgRecordRepository.batchMsgRecordInsert(msgRecordVos);
    }

    @Override
    public void updateMsgRecordStatus(MsgRecordVO msgRecordVO) {
        msgRecordRepository.updateMsgRecordStatus(msgRecordVO);
    }

    @Override
    public List<MsgRecordVO> getMsgRecordVOList(Long msgId) {
        return msgRecordRepository.getMsgRecordVOList(msgId);
    }

    @Override
    public List<MsgRecordStatisticsVO> queryMsgRecordsStatistics(ApiStatisticsQuery apiStatisticsQuery) {

        List<MsgRecordStatisticsVO> query = msgRecordRepository.queryMsgRecordsStatistics(apiStatisticsQuery);

        List<MsgRecordStatisticsVO> initList = new ArrayList<>();
        for (ChannelTypeEnum pushChannelEnum : ChannelTypeEnum.values()) {
            initList.add(new MsgRecordStatisticsVO(pushChannelEnum.getType(), pushChannelEnum.getName(), 0));
        }

        if (!CollectionUtils.isEmpty(query)) {
            initList.forEach(msgRecord1 -> query.forEach(msgRecord2 -> {
                if (msgRecord2.getChannelType().equals(msgRecord1.getChannelType())) {
                    msgRecord1.setMsgCount(msgRecord2.getMsgCount());
                }
            }));
        }
        return initList;

    }

}
